package com.soup.faker.wrapper;

import com.soup.faker.api.Generator;

import java.util.Objects;
import java.util.function.Function;

/**
 * 转换生成器
 * 先生成E类型对象，再通过转换函数将其转换为T类型
 * @param <E>   原始生成类型
 * @param <T>   转换后类型
 */
public class ConvertedGenerator<E, T> implements Generator<T> {
    private Generator<E> generator;
    private Function<E, T> transFunc;

    public ConvertedGenerator(Generator<E> generator, Function<E, T> converter) {
        Objects.requireNonNull(generator);
        Objects.requireNonNull(converter);
        this.generator = generator;
        this.transFunc = converter;
    }

    @Override
    public T get() {
        return transFunc.apply(generator.get());
    }

}
